package cn.teduymdj.jxc.service.impl;

import cn.teduymdj.jxc.ex.ServiceException;
import cn.teduymdj.jxc.mapper.UnitMapper;
import cn.teduymdj.jxc.pojo.dto.UnitAddNewDTO;
import cn.teduymdj.jxc.pojo.entity.Unit;
import cn.teduymdj.jxc.pojo.vo.UnitListItemVO;
import cn.teduymdj.jxc.pojo.vo.UnitStandardVO;
import cn.teduymdj.jxc.service.UnitService;
import cn.teduymdj.jxc.web.ServiceCode;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 商品单位实现类
 * 李柯辰
 */
@Service
public class UnitServiceImpl implements UnitService {
    @Autowired
    UnitMapper unitMapper;

    @Override
    public void saveUnit(UnitAddNewDTO unitAddNewDTO) {
        //即将检查单位是否被占用……
        int count = unitMapper.countByName(unitAddNewDTO.getName());
        if (count != 0) {
            // 是：抛出异常
            String message = "添加单位失败，单位已存在！";
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }
        Unit unit = new Unit();
        BeanUtils.copyProperties(unitAddNewDTO,unit);
        int rows = unitMapper.insert(unit);
        // 判断插入数据的结果是否符合预期
        if (rows != 1) {
            String message = "添加单位失败，服务器忙，请稍后再次尝试！";
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
    }



    @Override
    public void delete(Long id) {
        UnitStandardVO queryResult = unitMapper.getStandardById(id);
        // 判断查询结果是否为null
        if (queryResult == null) {
            // 是：抛出异常（ERR_NOT_FOUND）
            String message = "删除单位失败，尝试删除的单位数据不存在！";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        int rows = unitMapper.deleteById(id);
        if (rows != 1) {
            // 是：抛出异常（ERR_DELETE：服务器忙）
            String message = "删除单位失败，服务器忙，请稍后再尝试！";
            throw new ServiceException(ServiceCode.ERR_DELETE, message);
        }
    }

    @Override
    public List<UnitListItemVO> listAll() {
        return unitMapper.list();
    }

    @Override
    public Unit getOne(Long id) {
        return null;
    }

    @Override
    public void setEnable(Long id) {
        updateEnableById(id, 1);
    }

    @Override
    public void setDisable(Long id) {
        updateEnableById(id, 0);
    }

    private void updateEnableById(Long id, Integer enable) {
        String[] tips = {"禁用", "启用"};
        // 判断参数id是否为1
        if (id == 1) {
            String message = tips[enable] + "单位失败，尝试访问的数据不存在！";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        // 检查尝试访问的数据是否存在
        UnitStandardVO queryResult = unitMapper.getStandardById(id);
        if (queryResult == null) {
            String message = tips[enable] + "单位失败，尝试访问的数据不存在！";
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        // 判断状态是否冲突（当前已经是目标状态）
        if (queryResult.getEnable().equals(enable)) {
            String message = tips[enable] + "单位失败，管理员账号已经处于" + tips[enable] + "状态！";
            throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
        }

        // 准备执行更新
        Unit unit = new Unit();
        unit.setId(id);
        unit.setEnable(enable);
        int rows = unitMapper.update(unit);
        if (rows != 1) {
            String message = tips[enable] + "单位失败，服务器忙，请稍后再次尝试！";
            throw new ServiceException(ServiceCode.ERR_UPDATE, message);
        }
    }

}
